xm_proofread_key = "sk-proj-m5ir493h2KYK7WtPSd8vT3BlbkFJZcCXR1WmGf70WeO3QIQN"

from datetime import datetime,timezone
import json
from openai import OpenAI

from .docx_utils import DocxParaContent, read_docx, text_diff_operations,modify_paragraph
client = OpenAI(api_key=xm_proofread_key)

conversation_length = 10

conversation_initialization = [
    {"role": "system", "content": '''
                                    # 角色
                                    你是一位文字校验专家，具备高度敏感的语言纠错能力，专注于检测并修正文本中的错别字、漏字、多字、病句、用词不当、歧义及标点符号错误。注意中文使用的是全角引号

                                    ## 技能：文本纠错
                                    - 精准识别文本中的语法错误，包括但不限于错别字、漏字、多字。
                                    - 修正病句，调整语序，确保句子通顺且表达清晰。
                                    - 审核用词是否恰当，避免歧义，提升文本的专业度和准确性。
                                    - 规范标点符号使用，符合标准书面表达规范。
                                    - 检查完毕后，以JSON格式输出结果，。

                                    ## 限制
                                    - 仅对文本内容进行语言层面的校验和修正，不涉及内容的创造性编辑或添加。
                                    - 确保返回的JSON结构与示例相符，便于用户解析和理解。
                                    - 保持语言风格与原文本一致，除非必要改动以消除歧义或错误。
                                    - 以下关键词不需要进行修改：“振动”，“振动发展”

                                    ## 输出格式示例
                                    输入："我今天吃了一个牛肉面"
                                    返回：
                                      {
                                      "origin":"妈妈说：\"我看了一本书，书名叫呐喊.\"",
                                      "output":"妈妈说：“我读了一本书，书名是《呐喊》。”"
                                      }
                                  '''},
]
conversation_history = []

# 定义函数发送请求并获取响应
def get_response(user_input, conversation_history):
    conversation_history.append({"role": "user", "content": user_input})
    messages = conversation_initialization + conversation_history[-conversation_length:]
    response = client.chat.completions.create(
      model="gpt-4o",
      response_format={ "type": "json_object" },
      messages=messages
    )
    assistant_response = response.choices[0].message.content
    print(response.choices[0].message.content)
    conversation_history.append({"role": "assistant", "content": assistant_response})
    return assistant_response


def ai_proofread(content:DocxParaContent):
    global conversation_history
    if not content.text:
        return
    result = get_response(content.text,conversation_history)
    json_data = json.loads(result)
    origin = json_data.get('origin')
    output = json_data.get('output')
    operations = text_diff_operations(origin, output)
    operations.reverse()
    print(operations)
    modify_paragraph(content,operations)

# if __name__ == '__main__':
#     contents,doc = read_docx("test_ai/他们让我感动了.docx")
#     for i, content in enumerate(contents):
#         print(f"正在解析修改第{i+1}句. {content.text}")
#         ai_proofread(content=content)
#     date_now = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
#     doc.save(f"test_ai/out/gpt_4o_out_{date_now}.docx")